package com.sh.caryr.erp.interceptor;

import com.sh.caryr.erp.entity.enums.Page;
import com.sh.caryr.erp.entity.user.User;
import com.sh.caryr.erp.util.ERPConstants;
import com.sh.caryr.erp.util.UtilityTool;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AuthenticationInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
        HttpSession session = request.getSession();
        String url = request.getRequestURI();
        String requestUrl = UtilityTool.getRequestExcludeDomain(url);

		/* Avoid a redirect loop for some urls */
        if (!"".equals(requestUrl) && Page.containsVal(requestUrl)
                && !Page.PAGE_USER_LOGIN.getVal().equals(requestUrl)) {
            User user = (User) session.getAttribute(ERPConstants.ATTR_USER);
            if (user == null) {
                String redirURL = Page.PAGE_USER_LOGIN.getVal();
                response.sendRedirect(redirURL);
                return false;
            } else {
                return true;
            }
        }
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
    }

    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
    }
}
